import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'
import { getToken } from '..'
import { showMessage } from './status'

const { VITE_PROXY_URL } = import.meta.env

// 如果请求超过 `timeout` 的时间，请求将被中断
axios.defaults.timeout = 5000

// 表示跨域请求时是否需要使用凭证
axios.defaults.withCredentials = false

// 允许跨域
axios.defaults.headers.post['Access-Control-Allow-Origin-Type'] = '*'

// 创建实例
const axiosInstance: AxiosInstance = axios.create({
  baseURL: VITE_PROXY_URL as string,
})

// axios实例拦截请求
axiosInstance.interceptors.request.use(
  (config: AxiosRequestConfig) => {
    const token = getToken()
    console.log('请求拦截')

    if (token) {
      config.headers!.Authorization = `Bearer ${token}`
    }
    return config
  },
  (error: any) => {
    return Promise.reject(error)
  },
)
// // axios实例拦截响应
axiosInstance.interceptors.response.use(
  (response: AxiosResponse) => {
    // 这个是刷新 token 的， 【 逻辑 就是后台每次响应给前端的时候，一个新的token，前端从响应头拿到新的token， 进行重新赋值】
    // if (response.headers.authorization) {
    //   localStorage.setItem('app_token', response.headers.authorization)
    // } else if (response.data && response.data.token) {
    //   localStorage.setItem('app_token', response.data.token)
    // }
    if (response.status === 200) {
      return Promise.resolve(response.data)
    }
    showMessage(response.status)
    return response
  },
  // 请求失败
  (error: any) => {
    const { response } = error
    if (response) {
      // 请求已发出，但是不在2xx的范围
      showMessage(response.status)
      return Promise.reject(response.data)
    }
    showMessage('网络连接异常,请稍后再试!')
  },
)

export default axiosInstance
